
#ifndef PARSER_H_
#define PARSER_H_

#include <fstream>
#include <string>
#include "../index/UnitDocument.h"
#include "../utils/Functions.h"

using std::string;
using std::ofstream;

class Parser {
private:
	short int state;
	string buffer;
	unsigned int document;
	unsigned int position;
	UnitDocument* unitDoc;
	ofstream* documents;

	/**
	 * agrega el termino(letras y numeros) que se encuentra en el buffer para ser buscado en la posicion relativa actual
	 */
	void addWordToSearch();
	/**
	 * agrega el numero que se encuentra en el buffer para ser buscado en la posicion relativa actual
	 */
	void addNumberToSearch();
	/**
	 * indexa el termino(letras y numeros) que esta en el buffer con la posicion actual
	 */
	void indexWord();
	/**
	 * indexa el numero que esta en el buffer con la posicion actual
	 */
	void indexNumber();

	void indexDocument(char* filename);

	bool digitsIndexables(string);
	void appendLetter(char);
	char removeTittle(char);
	short int getCharClass(char);
public:
	void parseDocument(char*);
	/**
	 * Parsea todos los archivos .txt que se encuentren en este directorio
	 * No busca recursivamente los .txt, solo en el directorio pasado por parametro
	 */
	void parseDirectory(char*, string);
	vector<QueryToken> *parseQuery(const char*);


	unsigned int getPosition();
	short int getState();
	void setState(short int);
	string getBuffer();
	void setBuffer(string);
	Parser();
	virtual ~Parser();
};

#endif /* PARSER_H_ */
